 AMP Help Index

I. Starting Out

A. Introduction

1.The Program

2.The Author

B. Requirements

C. MIDI

D. Hardware

E. Registration

2. Units of the Program

A. The Application Window

1. The Active Song

2. Play, Stop, Record

3. Devices

4. The Synchronizer

5. System Settings

B. The Playpanel

1. The Tempo

C. The Song

1. Subdocuments

a) Containing

b) Including/Removing Files

2. Resolution

3. The View

a) Channels and Tracks

b) Track Parameters

4. Comments

D. Sub-Document Types

1. ArborRhythm Files

a) The Typical Function

b) Tree Timing

c) Solution Types

d) The Active Node

e) Solving the ArborRhythm

f) Function Types

2. Words

a) Use by FxWord

3. MIDI Files

E. Collections

1. Use by FxSet

F. View Types

1. The Graph

a) The Axes

b) Display Attributes

c) Selecting Notes

d) Stretch/Shrink

e) Quantize/Randomize

2. The Staff

a) Cleff

b) Tempo

c) Key Signature

3. The List

III. Appendices

Appendix A: Commands


Introduction to the program

The ArborRhythms Music Processor has finally made it to version 2.0.

Features at a glance:

•	Create music using functions and sets of notes, or create a musical grammar (language).

•	Roughly 60 Functions which combine to algorithmically create music.

•	A MIDI effects processor (real time) which is capable of such effects as delay or chord-builing from a single note.

•	Record and play midi files, and allow their manipulation through a graphical view, a list of notes, staff notation, or a track parameters view.

•	It is capable of combining 36 tracks from many different midi files at once.  Each track maintains its own independant timing, volume, instrument, pitch, midi channel, and output device.

•	This program is General MIDI compatible, and it supports MIDI files type 1+2 (2 is by far the most common).

•	WYSIWYG Printing of graphical view and piano notation.

•	Cleff, Tempo, and Key Signature selection.

•	It has its own MIDI Jukebox.

•	Dynamically alterable Tempo.

•	Quantize/Randomize functions.

•	Stretch /Shrink Time functions.

•	Cut, Copy, Paste, Delete, Undo.

•	Built in Help


The ArborRhythms Music Processor

This program is primarily a MIDI sequencer, with one important addition; the ArborRhythm file type (.ARB).  This kind of file can generate a midi file, and can be altered while playing.  It can take MIDI keyboard input, turn it into something else (eg. delay it or make it a chord), and output it again.  Or it can directly create music using the 60+ functions, such as letting the amplitude of a Sine wave determine the pitch of the note.

ArborRhythms are designed to enable the creation of music in a new way.  Instead of transcribing the individual notes of a song, you manipulate that song in terms of higer level structures, such as (musicological) words.  The gives a structure to the music which is not entirely determinable from the series of notes that it produces (in other words, a deep stucture (cf. Chomsky)).  To describe this structure, this program implements a binary tree, similar to those used in modern syntactic theory.


The Author

This program was written by me: Alec M. Rogers.  It began while I was in college, and it continued after I had dropped out.  Ironically, it began as a project that I was writing for the only computer science course I have ever taken- and the only course that I failed in four years of college.  Oh well.  I have been working on it for about five years now, and it takes just about all of my spare time.  Im a preschool teacher in Oregon, by day, who likes to ride his bike really fast to make up for the time that I spend in front of my computer.

Oh, and guess what, I also like to make and listen to music.  That is one reason I am creating this program.

Dedications:  I would like to thank my family, Dick, Joan, and Greg Rogers, for all their years of toil in making me who I am.  I would also like to thank Ben, my roommate, for all his patience with the endless musical questions (not to mention the piles of dishes) that my endless programming has produced.  I would also like to thank the rest of my friends for their support in my endeavor. Ultimately, however, S.D.G.


The Requirements

This program requires:

•	A computer running at least Windows 3.1 (Win95 O.K.).

•	A MIDI soundcard (if music is to be heard).

•	A MIDI Keyboard (if music is to be recorded/manipulated).

•	A Printer (if music is to be printed).

•	Roughly 1 Meg Hard drive space.


MIDI: the Musical Instrument Digital Interface

MIDI is a language with which it is possible to speak to synthesizers, samplers, or sound cards.  It is typically a simple, three-value communication.

These three values are: Note Type, Pitch, and Velocity.

Each may range from 0-127.

Note Type: Each Note Type value contains the MIDI channel that the event occurs on(1-16).  The most common note type is a note-on, but other Note Types can do such things as changing the instrument or bending the pitch of the note.

Pitch:  Pitch increases upwards.  A pitch of 60 is equivalent to C3 (Middle C).  Because there are 12 notes in an octave, 48 is C2 and 72 is C4.

Velocity: Velocity increases upwards.  A velocity of 0 will make the note not heard at all, and a velocity of 127 will probably make the note louder than its neighbors (assuming they have lower velocity values).

MIDI CHANNELS: There are 16 MIDI channels.  This is roughly equivalent to saying that there are sixteen members in the MIDI band.  Each track usually only has one instrument associated with it, but it is possible to embed intrument changes in the outgoing MIDI file.

MIDI FILE RESOLUTION: MIDI files come in a variety of resolutions.  This means that some have many increments per second, others only few.  The general range  is 96-960 ticks per beat, but by far the one most encountered by myself has been 480.


Hardware

This program requires a soundcard or external device with midi capability.  General MIDI intrument mapping is supported, but it can be turned off, so a GM device is not required.  Essentially, GeneralMidi makes MIDI agree on the choice of instruments, so selecting GM Mode will replace instrument numbers with the list of GM intrument names.

By default, the program selects the first MIDI In and Out devices on your system.  If you want to have multiple MIDI devices, you must must open them manually.  To do this, activate the songs menu, and then go to MIDI DEVICES.  In the current edition of this program, multiple midi outputs are supported, but only one midi input can be chosen at one time.

The first choice of MIDI IN and first choice of MIDI OUT are saved by the application.


Registration

This program is shareware.  If you use it, please send $20 (check or MO) to:

Alec Rogers

3945 SE Cora St.

Portland, OR 97202

Sending in the shareware fee is considered registering the program.  Once you register the program, you will be sent the password which allows you to access the Mezzanine, a  place on the  ArborRyhthms home page (www.teleport.com/~mantra) which contains additional sound source files for use with the program.  You will also be entitled to receiving answers to questions about the program, which I will try my best to answer (E-Mail is preferred for questions/comments).  At this time, however, I cannot guarantee full-fledged technical support, as I do not know how many questions I will be receiving.  I will try my best.


The Main Window

The Main window of the program has very few options active.

One important thing to do is go to the System Settings dialog box and select the preferred directory for media.  This will enable the program to always look in the same starting directory for its media.  It is  suggested that the \Media dierectory (one of the directories provided with the program) is used inially, to peruse the files included with the program.

There are several Buttons on a button bar.  They are, respectively,

•	New -> Creates a new file.

•	Open -> Opens an existing file.

•	Save -> Saves an existing file.

•	Solve -> Solves a song; important for ArborRhythms only.

•	GotoStart -> Goes to the beginning of the file.

•	Record -> Starts recording.  A song must have an open record track.

•	Stop -> Stops Play/Rec.

•	Play/Pause -> Plays or pauses the song.

•	Set Active Song -> Allows selection of the active song.

•	Open Playpanel -> Opens the playpanel

•	System Settings -> Alter the global settings of the program.

•	Shrink -> Makes the view small, but leaves commands open.

•	Help -> You may have pressed this button just moments ago…


The Active Song

To have music, you must open a Song.

The Active song is the song that is currently selected for playing.  If you only have one song open, you do not have to worry about selecting the active song; it will be by default.  If more than one song is open, however, only one of the songs can be played at a time.  This song, that is selceted for play, is referred to as the active song.

To activate these options, a song must be created (New) or opened from a (.sng) file.  It then must be included, but this happens by default.  This selection of song allows multiple songs to be open at one time, but it prevents the program from trying to play both of the songs at one time.

HOW TO INCLUDE A SONG: There are two ways.

The first is on that songs menu.  Go to the first menu topic (File) and select Include.

The second way is to click on the icon that  looks like an electrical plug on the button bar.  This will open a list of all the open songs which maybe included.


Stop, Play, Record

These actions are available when there is an included song file, with open read/write tracks.  You will probably use these commands most often from the Playpanel, a graphical front end that looks like a cassette player.

•	Stop:  Stops play of the song.

•	Play:  Plays or Pauses the song.

•	Record:  Records midi to the previously chosen track.

TO PLAY:

To play, a song must be open.  It maust also have information in it.  This information can either come from its own data, or the song may open a SubDocument and use its data (such as for playing MIDI files).

TO RECORD:

If you wish to record MIDI information to a source file, there are two things to do, and one thing to keep in mind.  First, go to the file menu of the midi document you wish to record to and change the channel to record to.  Second, go back to that menu and select record.  Then press record.

The thing to keep in mind is, the incoming data will wipe out information that was on that track.  For this reason, you should record to a blank channel.  Open one first, if you have to, by going to the <Show Channels> dialog.


Devices

One midi in device and multiple midi out devices are supported.  They can be changed by going to [View] of the Songs menu, and then to menuitem [Midi Devices…].  At that point select the total number of out devices, and each individual device.

Note that by default the program opens the preferred (first) In and Out Device the next time the program runs.


The Synchronizer

The Synchronizer is responsible for getting the events out on time.  There is one synchronizer for all of the events, so changing its parameters affects the whole song.  The synchronizer has different parameters:  Timer Period, the Timer Source, and the Que length.  These are each set on the Sync dialog.

•	Timer Period:  Specify how often the timer will check to see if it is time to send an event.  Can be either 1 or 10 milliseconds.  10 is generally adequate.

•	Timer Source:  Can ONLY be Internal, which is the default.  Tell me if you want Midi Clock or SMPTE timing, as this is possible.

•	Que Length:  Each device has a Que of events which are waiting to be sent.  You may lower this value to hear changes made in the music more rapidly.  If there are audible glitches in the music, you may have to increase this value.


System Settings

There are several options on the system settings dialog box.

•	Media Directory :: set the default directory for media.  To select a directory, all you have to do is select a file within the directory- the file name at the end is scrubbed.

•	Open New Song :: if you want to open a new Song(.sng) every time the program is started.

•	Automatic Include :: if you want your SubDocuments (i.e. midi files) to be automatically included into the current song when they are opened.

•	Tree View Follows Active :: if you want to navigate the ArborRhythm with relative mapping of the tree.

•	Register File Types :: You can, select, and register the programs file types with the system.  This will enable them to be auto-launched by double clicking on their image.

AMP will only register its file types if they are not currently in use by another program.  When you register the file types with the system, you will be able to open (via DDE) a .arb, .sng, .mid, or .col file by double clicking on it, or selecting from the menu that a right click opens.  If you wish to also play (via DDE) the file, you must do the following:

1. Double click on the My Computer icon (which you no doubt renamed).

2. Go to the <View> menu, and select <Options>.

3. Go to the <File Types> page.

4. Select the Algo file type that you wish to edit (.col, .mid, .sng)

5. You will see that there is only one option for the file- Open.  Add another, called play.  It is the same as open, except after the DDE command [open(%1)], you will put another DDE command, [play()].  If you wish the program to close when the song is finished playing, add yet another- [close()].

6. To summarize:  Add an option, Play.  Select <Use DDE>, and type the following in the DDE command field: 	[open("%1")][play()][quit()]

(Do not use any spaces).

If you want playing to be the default behavior of the file type, select option <Set Default>.


The Playpanel

Drag it open.

The scroll on the top of the playpanel is a goto-bar. Its ends are the Start and End markers underneath, and if you change it, the Now position will move to the appropriate place in the file.  Similarly, if you change the numerical Now position, the scroll bar will move.

There are three times, given in beats, on the playpanel.  The first is the Start position, the second is the Now position, and the third is the End position. When playing begins,  the song starts from the now, and proceeds to the end.  If the loop button is selected, then playing will begin at the Start again after it finishes (reaches the End).

If you ever want to restore the songs natural beginning and ending,  hit the button marked Restore Endpoints.  The Start is always zero, the End is the length of the file.

There is also a Goto-Time box, with a button next to it.  By default, clicking on the GOTO button takes you to the beginning of the song.  You may change the place that you wish to go to, by selecting it from the adjacent combo box.  Also, you may type in a number (as long as it is between the Start and End times).

Also a tempo edit box.  Changes must be input by typing the Enter key.


The Tempo

The Tempo specifies the number of beats per minute.  If the Tempo=60, for example, then there are 60 beats per minute, or exactly one beat per second.  If the Tempo=120, each beat lasts only one-half of a second.

In order to have the changes in the tempo go into effect, press the RETURN key.

Suggested tempos range from 32 to 360, usually 60 or 120 to make it easily convertable to exact seconds.


The Song

The AMP Song is similar to a multi-channel mixer.  It is capable of combining selected tracks from different midi files at one time.  It has all the parameters of the files involved, such as track volumes and speeds.

After a song is open and active (i.e. the Active Song), all you have to do is open a midi file.  This MIDI file will be included in the song by default (this can be changed), and the Song window will then fill with the parameters from the MIDI file.  You are ready to play.


The SubDocuments

The Song does not store its own musical data, unless the SubDocuments have been [Contain]ed in the Song.  This is a conversion process that takes all of the data of the SubDocuments, and stores it in itself.  Because of this, changes in the data of the previos files will not sffect the songs data anymore.

There are three types of SubDocuments: Words, MIDI files, and ArborRhythms.  The Song document will save the filenames of its SubDocuments, the data of all the sub-documents which are contained by the Song, and it will save all of the information that is displayed on the song view screen. When you open a song, all of its SubDocuments are opened at the same time.  Similarly, when you close a Song, all of its SubDocuments are closed.  Note that changes to these documents will also affect the song, as they are the Songs data.

The Song has the option of Containing the music data, or only Including the filename (for example, C:\media\source.mid) of the document that contains the music information, which is used to open the independant SubDocument when the song is played.  The second option is better if you use the same music material in several different songs, as changes to this file will affect all of the songs which use it.  It has the potential disadvantage, however, of not being able to locate the SubDocument (if you moved or deleted it), and thus not being able to play the Song.


Containing Files

Containing track information makes the song store its own copy of the musical data.  This can be done by pressing the button to the left of the tracks name in the Songs view.  At this point, to see the data, you must open it; it is stored inside the Song.  The song remaining on the desktop has been copied, and it is no longer a part of the song.

To Contain a track within the Song, simply press the button to the left of the track name, and select the option [Contain].  If you now press the  button again, two new options are added: [Remove](de-Contain) and [DISPLAY](show).

Once a file is contained within a Song, the data will save in the same file as the Song.  The original SubDocument is left, but that track is no longer included.  On the Track Parameters of that Songs view the derivation will be set to CONTAINED.


Including and Removing Files

Let me say first that if you plan on using only one Song at a time, and you keep the default settings, you can safely skip the next section.  Just Remember to have a Song open before you open the SubDocument (eg. MIDI file).

If a SubDocument is opened, it is by default Included into the Active Song.  If there is no Active Song, the SubDocument is not included into any song, so you will not be able to play it.

If you wish to turn off this default action, go to the System Settings dialog and select the checkbox Include files by default.

You can manually Include a SubDocument in this way by going to its [File] menu, and selecting [Include].

To Remove a midi file from a song, the process is the same, the button is different: in this case, [Remove].

If you wish to include only part of a SubDocument, you have to Include the file, and then, in the Song view, click [Remove] on the tracks that you do not want.

Songs which dont store their own data depend on knowing where to find their source (eg. .mid(MIDI)) files.  If you make a song and then move the .mid file that made it, the song will no longer work.  For that reason, you are advised to put all of the source files(.mid) for songs in the directory you selected as your Media directory on the System Settings dialog.  You do not have to do this, but it insures you remember that there might be some file dependencies you want to check out.


The Resolution

Resolution specifies the number of subdivisions of a beat, where the relationship of the beat to time is determined by the Tempo.  By changing the Resolution of the Song, you will also be changing the resolutions of all of the Contained SubDocuments.  To change the Resolution  of the SubDocuments that are not Contained, go to their individual windows and select the [View], then [Set File Resolution].

The Real Resolution, the resolution of the whole piece, is the Songs resolution.  The other files will be out of sync (thus slower or faster), unless you elect to make the resolutions equal.

•	Typical Resolution Settings :: 120, 240, 480, 960 ticks per beat

•	1 beat (at Tempo=60) is equal to 1 second.

•	480 ticks (at Tempo=60, Resolution=480) is equal to 1 second.


The Song View

Each row of the song view represents one track.  Each column of the view represents a different parameter of the song, such as volume or speed.  For a summary of these parameters, see the Track Parameters page.

There are 12 Tracks per page, which you may have to scroll to see.  Pages can be turned by selecting the combo box at the top of the view, three times, for a total of 36 tracks.

To view Contained SubDocuments, mouse-click on the button to the left of the Tracks name.  If no menu appears, there is no Included track.  If it appears but [View] is not an option, the Track is Included; it is therefore open on the screen.  Its filename should appear on the Track Parameter derivation, at the end of the Tracks row.


Channels and Tracks

Tracks refer to the 36 potential Tracks which this program is capable of using.  Channels, on the other hand, refer to the MIDI transmission channel of an event.  Tracks 1 and 2, displayed on the Songs view, might be sent to the same MIDI channel, or they might be sent to different MIDI channels.   If they are sent to the same MIDI channel (eg 1) of the same MIDI Device, changing Track Parameters (eg.volume) of one will change the Track Parameters (volume) of the other.

In Short:  Split up your MIDI channels.  Dont transmit all your Tracks on Channel 0 or 1.  Keep in mind that Channel 10 is the drum kit for a General Midi synth.  Now for drums, it is not possible to split up tracks onto different channels (they all must be on channel 10).  So instead of Muting (which affects MIDI channel), try Disabling the track (in the pop-up menu seen by clicking on the button to the left of the track in the Songs view).

Also, keep in mind that only CHANGES in channel number will be effective.  The channel number of a track will only over-ride the track information if it is changed.  This is to allow ArborRhythms to transmit different channel messages from a single tree.


Track Parameters

The Track Parameters are the following variables.

•	Name :: The name of each track.

•	Channel :: The number of the MIDI channel. Changing this number will convert all Events on the Track to the selected number.

•	Mute :: Check the box to quickly turn off the channel.

•	Volume :: The volume of each channel, with a range of {0…127}.

•	Balance :: Balance, with a range of (-63…63}.

•	Instrument :: Selects an intrument for that rows Channel to use.

•	Loop :: If the Track should be looped (at time=EndTime) to fill the song length.

•	Start Time :: The delay before the track begins.

•	End Time :: The end of the track, used for looping purposes.

•	Destination ::  Select the output device.

•	Derivation :: The source of the file (i.e. temp.mid).  If this is equal to CONTAINED, then the Song has the musical data itself.


The Comments

The Song has a text file that is saved with it, in which you can make notes about the songs that you write.  So does an ArborRhythm.  These notes are useful ways to keep track of information about the song.  There are comments in some of the example songs.

•


Document Types

There are five document types handled in this version.

•	AMP Song: (.SNG) This is like a meta-file for different subdocuments.  The subdocuments contain the source material and the song document contains information about how the different pieces fit together.  Alternatively, it can contain its own midi information, so that there is no worrying about file dependencies.

•	ArborRhythm: (.ARB) This is a way to generate music, using functions to describe musical events as a function of time.  Its basis is a binary-branching tree, which has one root, at the top.

•	Word: (.WRD) This is a short musical word, designed to be used in loops and larger compositions.  These should generally be kept in the …\Lexicon directory.

•	Midi File: (.MID) This is a common music format file, found everywhere.  This program is capable of reading and writing Midi Format I+II files (the most common).

•	Collection: (.COL) This is a collection of midi files and songs which can be played sequentially (its a jukebox).  It has a special use within the ArborRhythms section of the program, because it displays the SET function.  This is the reason that each ofthe entries has a degree of membership in the set (the collection is a fuzzy set).


ArborRhythms

ArborRhythms are trees.  They live in file types with the extention .ARB, and as with everything else, they need to be Included in a Song if they are are to be played or recorded to.

ArborRhythms are binary-brancing function trees.  They look much more like a root-system, though.  They begin underground, at one point; the ROOT.  There is only one ROOT per tree, but from this other smaller roots extend downward.  Or like a geneology; there are children (descendants), parents, siblings, but there is no inbreeding.  That is not allowed.

There are two parts to the tree; nodes (i.e. functions) and connections to other nodes.  At one level of analysis of the nodes of the tree, there are only three kinds: nodes that have two branches coming down (a left and a right branch), nodes that have one branches coming down (to the left), and nodes that have no branches coming down (these are called terminal, or Leaf, nodes).

ArborRhythms are sort of like a visual music programming language.  It has a group of functions, which are Solved to get a musical result.  If there is randomness (RANDOM) in the generation of the file, you might not get the same solution twice.

It can accept input (INPUT).  The midi input device will send its data to any ArborRhythm INPUT function that is set to record by the Song.

It can generate musicological words (WORDs) through different logical and mathmatical functions, applied to NOTEs.  These NOTEs, in turn, are generated by manipulations of CONSTANTS.  In a more abstract direction, SETs can be made out of WORDs.

Lets take a quick example.  Lets say I wanted 1 note to happen every second.  I need three functions for this: {EVERY, CONSTANT, NOTE}.  In other words, Everytime(Time=Constant), send a Note.  All thats left to do is specify the note parameters (pitch, etc.) and set the CONSTANT=1000 (for 1000 msec, or 1 sec).

To really understand ArborRhythms, look at some of the sample files.


The Typical Function

Each Function (node) has several common alterable attributes:

•	Name :: The name of the node.

•	Start Time :: The delay (time to wait) before the onset of the Function.  (msec)

•	Duration :: The amount of time before the function ceases. (msec)

The function might also have other alterable attributes related to its specific function.  For example, the function NOTE contains MIDI note information.  To view these attributes, left mouse click over the desired function to get the menu, and then select [Define].

Start times are cumulative as you descend through the tree.  For more information about this, see the section on tree time


Time in the Tree

Timing :: ArborRhythms have a timing resolution which is set in milliseconds (1 sec = 1000 msec), and so do their times (Start Time and Duration).  Furthermore, as you traverse down the tree, the Start Times of each of the functions are added; if one function is a branch (descendant) of the other, the lower function cannot occur before the upper one.  The delay before function onset is cumulative.  If a function has two parents with Start Times of  2000 (2 sec), even if it has a Start Time of 0, it will not begin until 4 seconds into the song.  In other words, the tree is time-delimited.  Each succesive node can use less time, but it cannot be longer than its parent.

If you want to dont want to time-delimit the tree (though this may make the Solution slower), just go to the ROOT node, and select [Define] the desired Song start and end times.  Then open the ROOTs menu, and select the option [Initialize Times].  This technique works anywhere; it makes all the descendant functions start at the onset time of the selected  parent function, and end when that parent function is done.  This will manifest as Start times which are 0, and Durations which are equal, for any nodes below the function that received the [Initialize Times] message.


Tree Solution Types

There are three types of events which this tree generates.  The Note is what is actually sent to the MIDI device.  Within the tree, however, it is possible to manipulate single Numbers, not whole Notes.  These numbers eventually contribute to a notes parameters, such as adding to the pitch through a NoteProperty function.

•	NOTES :: Notes are what are sent to the MIDI device.  They begin with either a Note function, or a Word (which is just more than one note).  They can be modified by the Basic functions, by transposing, inverting, looping, etc.

•	NUMBERS :: Numbers may only be used to change the properties of the notes.  They are not complete notes, so they do not do anything by themselves.  Mathmatical and Logical functions operate on numbers, not notes.

•	SETS :: Beneath the Set function lies the means to generate the set.  It does not take Note or Number information, it takes other set infomation.  In this way, sets can be based on other sets, by uing the Set functions like Intersection or Union.


The Active Node

To move the Active node, click on a function with the left mouse button.  The Active node on the tree is indicated by a darkened circle around the nodes icon.

If the option Follow Active Node is selected(under the [View] menu, see [Drawing Options]), the Active Node will always be in the same place (the root position).  In other words, as soon as a new Active Node is selected, the tree will re-draw to that position.  Other parameters can be set here, such as [Fit Tree To Window], which scales the drawing size to thewindow size.

A left button double click in either mode will make that note the views root position (top middle).

A Right button click, on the other hand, will raise a function-specific menu of options.  Several options are the same;

•	Define :: Sets the parameters of that node.  If the node is NULL, this will enable you to pick a function to add at that point.

•	Graph :: Displays what is generated by the ArborRhythm at that point in the tree.  Altering it has no permanent effect except for the FunctionWOR

•	Accrete :: intoduces a new function which Accretes (unitizes) all of the functions below it.

•	Align Times ::  Will make all of the descendents of the selected node have equal times to itself (Start=0, Duration(parent)=Duration(Child)).


Solving the Tree

When the tree is the way that you want it, and you want to solve it, hit the Solve button.  If you press the button when the Song is active, all of its SubDocuments will be Solved.

If you have modified the Tree by re-Defining one of the functions, the song will be solved automatically (under the [View] menu, see [Computation Options]).  It will regenerate the file, so if random numbers are used in the generation process, it is not necessarily the same music as it was the last time.

If the tree takes a really long time to solve, hit the solve button again.  This will stop the solution process.  Take a look at the tree; Play what you have generated so far.  Does it sound right?  Complicated ArborRhythms will take a long time to solve, proportional to the complexity, but be on your guard against a poorly written ArborRhythm.  Time-delimit the tree when possible (set the function Start and End times to define the narrowest time that the Function occupies).  Also turn your musical manipulations into WORDs whenever possible.  This will prevent the ArborRhythm from doing any unnecessary work.


ArborRhythm Function Types

Here is a list of each function in ArborRhythms Music Processor.  Identical information can be read by clicking on the [Define] option of a Function when it is open in the tree, at which point you can also change the individual Function parameters.

All of the mathmatical functions and logical functions operate on Numbers, not Notes.  With the Logical operators, if the Number is not equal to zero, it is TRUE (passed on unmodified).  Otherwise, it is FALSE (zero).

So, the types of events are Number, Note, and Set.  This last type is used only underneath the Set functions, and enables things like taking the Set  Union of two lower sets, without havingto make a whole new set.

Basic

Accrete------This function is able to use all of the other functions as primatives within its own expression, so that complex operations can be achieved within a single node.  You should accrete, or 'unitize', those functions which have a consistant internal relationship to each other.  One branch is possible (optional), which is derived from one of the accreted nodes.  This is designed to allow changes in the parameters of the accretion without having to open the accretion.  If no node is selected, the function will work properly, but you will not be able to change the nodes inside of the accretion without un-accreting it.

And------This function combines two events, the way that the Add function combnines numbers.  Use this function to combine two notes into a chord.

DrumNote------This function returns a drum (note) event, and the note's default parameters. It needs to be transmitted on Channel 10 to a General MIDI instrument for correct drum mapping.  If you do not have a GM device, the channel may need to be changed.

Every------This is a periodic function.  It returns the answer (right branch result) when the time is divisable by the numerical left branch result (without leaving a remainder).  eg., Every 500 msec, do what is in the right branch.

Initialize------This function will re-initialize its left branch, when the right branch returns a non-zero value.  Initialization will perform activities such as picking a new word from a set, or resetting a counter  to zero.

Input------This function puts input from a MIDI input device into the tree.  The ArborRhythm must first be included in a Song, and the record button for this track must be selected.

MidiController------This function returns a MIDI controller type, and data for that controller. Volume, Pan, and  Modulation Wheel are three types of controllers.  You might want to find  out what kind of MIDI Controller messages your device supports, so that you can send others (such as the amount of chorus).

MidiData------This function returns sends a 3-byte midi message. In the left branch, three values must be specified.  You should supply the three  values using the AND function twice.  Values will be sent left-to-right, assuming that the times are the same.  Virtually all MIDI data can be transmitted using this function.

Note------This function yields a note event, and the note's default parameters. These values can be modified further up the tree through a NoteProperty function.

NoteProperty------This function changes the values which constitute a note event.  You may opt to change the Pitch, Velocity, or Duration of a note, but each parameter alteration requires its own NoteProperty function.  Note that you can add to or replace the incoming values.

Null------This node does not contain any information.  It is significant, however, because of this fact.  It is a leaf node (it has no branches) which is used as a place-holder for a node which is not yet defined.  It does not have to be defined, but if you do not turn it into something else, it will do nothing.

Or------This function chooses to yield only one of its branches at a time.   Which branch is chosen depends on the user-adjustable probability of choosing the left branch.

PitchBend------This function micro-tonally alters the pitch of a given channel. It basically makes the intrument 'fretless', such that the octave is divided into many more than 12 intervals.

Pointer------This is a function that breaks the 'rules' of the tree structure.  A pointer function 'points' to another function, such that the answer is the same as the function being 'pointed to'.  When using this function, please remember that if you delete the 'pointed to' function, this function will not be able to give an answer.

Word------This function holds a list of song events.  You may paste a selection from a MIDI (or Word) file, create a Word directly from a MIDI file, or select the <Graph> option of this function and edit the notes manually.

Musical

Arpeggiate------Arpeggiate adds several notes after the input, with altered pitches. This function's parent should be a Scale function if you desire the arpeggiation to be on a scale.

ChordBuilder------This function builds a chord based on the note parameters of the left branch.  In musicological terms, the note derived from the left branch become the 'root note' of the chord.

Delay------This function is essentially a delay pedal.  Delayed note(s) will be added to the original note, for the number of repititions specified, temporally delayed by the specified period.

Interpolate------This function places a note in between (temporally and pitch-wise) the last received note and each successive note.

Invert------This function inverts, or flips, the input notes around the chosen pitch.

Loop------This function loops the lower branch repeatedly, at a user-defined loop point.

Quantize------This function quantizes the event times from its left branch based on the selected Quanta size.  In other words, it can force the note events to occur on particular beat divisions (such as thirty-second note intervals).

Scale------The answer given by the left branch is passed through the type of scale defined in this function.  In addition  to selecting the scale, and the key in which  the scale should be played, you need to select the type of scale-fitting which occurs.  Cut will remove the notes which are not in the scale.  Push Up and Push Down will push the notes into the scale.  Seamless fit makes every pitch increment equivalent to one step within the scale.  Seamless fitting begins at the middle note of the selected key, so if the key is C, the middle (unadjusted) note would be C3 ( or value 60).

Stretch------This function Stretches the event times which it is given by a user-determined stretch factor.  If the stretch factor is less than one, the event times will be shrunk.

Substitute------This funtion will yield the information of its right branch if there is a note result from the left branch.

Mathmatical

AbsVal------The absolute value function will return the absolute value of the number returned by the left branch.  If the number is positive, this function has no effect.

Add------This function adds the numerical result of both branches.

Constant------This function enables numerical (floating-point) input.  It will not play a note on its own, but it can be used to modify a notes' parameters.

Cosine------This function multiplies the parameters of both children, and takes the cosine of the result.  The input should be in radians (0-2 pi), which can be generated easily by using the temporal phase function.

Counter------This function returns a count.  The count is incremented by the the numerical result of the left branch, and is made zero again by initialization.

Divide------This function divides the numerical result of the left branch by that of the second.

Exponential------This function returns the value of the left branch raised to the power of the numerical result of the right branch.

Log------This function returns the natural logarithm of its left branch.

Modulus------This function returns the numerical result of the left branch which is left over after division by the result of the right (i.e., MOD(4,3) = 1, MOD(7,7) = 0).

Multiply------This function returns the numerical result of the left branch multiplied by the right branch.

Random------This function returns a (pseudo-)random number in the range of (0.0-1.0).

RoundTo------The rounding function returns the largest amount of the numerical answer of the left branch which is evenly divisable by that of the second.

Sine------FxSine returns the sine of (the numerical answer of theleft branch multipliedby the answer of the right branch).

Subtract------FxSubtract returns the numerical result of the left branch minus the result of the right branch.

Tangent------FxTangent returns the tangent of (the numerical answer of the left branch multiplied by the answer of the right branch.

Temporal------FxTemporal returns the current solution time.

TemporalPhase------This function returns a value from 0-2 pi.  It is useful to establish a trigonometric oscillation, or phase.

Logical

LogicalAnd------This function returns TRUE if and only if both of its branches return TRUE.  Otherwise, it returns FALSE.

EqualTo------If the numerical result of the left branch is equal to the second, this function returns TRUE; Otherwise, it returns FALSE.

GreaterThan------If the numerical result of the left branch is Greater than that of the right, this function returns TRUE; Otherwise, it returns FALSE

IfThen------If the numerical value of the left branch is TRUE (not equal to 0), this function returns the solution of the right branch; Otherwise, it returns nothing.

LessThan------If the numerical result of the left branch is less than that of the right branch, this function returns TRUE; Otherwise, it returns FALSE

LogicalOr------If either branch is TRUE, this function returns TRUE.   Otherwise, it returns FALSE.

Set

Complement------This function takes the set complement of the left branch, using the set derived from the right branch as the domain.

ExclusiveUnion------This function takes the exclusive (symmetric) union of its two children.A word that is in one set but not both sets is included (in this set).

Intersection------This function takes the set intersection of its two children.  This means that only elements which are members of both sets will be included.

MetaWord------This function sequences its two branch words.  It can do this consecutively (solve the second branch only after the first has stopped) or after a certain amount of time (solve the second branch after 500 msec).

Set------The FxSet function contains a list of Words, and the degree (called Degree Of Membership, DOM) ( 0.0 - 1.0) to which they each belong to the set.  If you wish the set to pick new words at its start, select the option 'Choose on Start'.  Its view is of the same type as is used for .COL files.

SubtractSet------This function is defined as the set which whose elements are contained in the left-branch set, but are not contained in the right-branch set.

Union------This function takes the set union of its two branches.  This means that it will consist of the elements from both sets.

Sound Blaster

SbEffects------This function sets the reverb and chorus of a SoundBlaster card with these capabilities.

SbEnvelope------This function sets a SoundBlaster pitch or volume envelope, using 5 times.  In the following table, each parameter is followed in parentheses by the range of the allowed value, and the smallest increment of measurement.  DELAY(0:5900, 4ms):: the time  after the note is received that the note actually begins.  ATTACK(0:5940, 1ms):: the time that the note takes to get to its initial peak.  HOLD(0:8191, 1ms):: the time till the note reaches a lower plateau.  DECAY(0:5940, 4ms):: the time the note begins to fade.  SUSTAIN LEVEL(0:127, 0.75db):: the loudness of the sustain.  RELEASE(0:5940, 4ms):: the duration of the fade to the end of the note.  ENV1 TO PITCH(-127:127, 4ms):: The affect of Envelope1 on pitch. Maximum effect is one octave.  ENV1 TO FILTER CUTOFF(-127:127, 56.25 cents):: The effect of Envelope one on the Filter Modulation's phase.

SbFilter------This function changes the filter of a  SoundBlaster.  CUTOFF(0:127, 62Hz):: the filter cutoff from 100-8000 Hz.  RESONANCE(0:127, ---):: Selection of a filter resonance coefficient.  There are only 16 resonance choices, so multiply coefficient(0-15) by 8 to get value (range 0-127).

SbLFO------This function changes one of the Sound Blaster's Low Frequency Oscilators. DELAY(0:5900, 4ms):: the time  after the note is received that the note actually begins.  FREQUENCY(0:127, 0.084Hz):: the time that the note takes to get to its initial peak.  PITCH(-127:127, 9.375cents):: the time till the note reaches a lower plateau.  LFO1 TO VOLUME(0:127, 0.1875dB):: The affect of Envelope1 on pitch. Maximum effect is one octave.  LFO1 TO FILTER CUTOFF(-64:63, 56.25cents):: The effect of Envelope one on the Filter Modulation's phase.

SbPitch------This function, for SoundBlaster cards, alters the pitch of an event in small steps.  It is similar to the MIDI PitchBend command, except that SB Pitch range is far greater.


Words

Words are essentially single-track MIDI files, which are constructed to allow for quick opening and playing.  It is a good practice to put words in the folder called Lexicon, inside the folder called Media.  That way the Set function will always be able to find them when it decides to speak them.

It is suggested that the Resolution be converted to milliseconds (set res=1000) if the Words are to be used primarily in ArborRhythms.  Otherwise 480 is a good number, as that is the default resolution of a Song (and the synchronizer abilities limit this resolution).

MIDI files can be exported into Word files, and vice versa.


Words and the FxWord

The ArborRhythm function WORD is just like a (.wrd) file, except that it is part of the function tree.  It can be easily exported as a word, however, if necessary.  When you select the option to graph this node, editing it will produce an effect on the notes of the WORD.


Midi Files

There are two important parameters of MIDI files:

•	Resolution :: set using the menu option [Set File Res].

•	Number of Tracks :: set using the [Show Channels] dialog.

Be careful about switching Resolutions.  Each succesive time you do it, it will generate slight loss in fidelity (unless the new resolution is divisable by the old).  It is often not necessary to switch resolutions at all.

When Songs are exported as MIDI, the Songs parameters will be saved to the MIDI file to the extent possible.  Remember that MIDI files do not contain all of the information that is contained by a Song file.


Collections

Collections are sets of Songs, which are played one after the other.  They may also be MIDI files or ArborRhythms, and in that case a default song is opened (Collection  Player) for them to be played through.

The collection is a series of file names, file locations, and user-entered comments about the file.  The collected elements are ordered in the desired order of play, and can be played by pressing the button Play Collection.  Once playing, it is possible to pause the song (by pressing Stop).  In order to stop playing the song, press the Play Collection again.

The song order can be alphabetized or randomized.

Make a Collection by opening a new collection and then going to add file (Upper left button).  From there you can add .mid files to the list.  Comments that you write will be saved to the individual .COL file, not to the midi file itself.  Try adding all of the songs located in the music directory.  Remember to save it.  If you want to hear the art of fugue, play the collection.

If you check the [sequential play] button, the files will play one after another.  The next song in the colection starts when the last one has finished.  Thus, if you wish to advance the songs in a collection with the play panel, select the [To Go To] point on the Play Panel as [End].  Then, everytime you press the Goto button, the song will go to its end, and the next song in the collection will automatically begin playing.

Please Remember: A Collection Depends on Paths (ie. C:\music\midis\fda.mid ).  If you move the file, the collection wont find it.  For this reason, if you keep all of the files (probably .WRDs) in the Lexicon directory (see the System Settings), the Collection is able to fill in the path names of the files which are located there.  This is useful for when you recieve a Collection  with filenames different from yours; simply put the Words into the Lexicon directory and press the button marked Find in Lexicon.


Use of Collections by Function SET

Collections are sets of songs, which are played one after the other.  They may also be midifiles or ArborRhythms, and in that case a default song is opened for them to be played through.

The collection is a series of file names, file locations, and user-entered comments about the file.  They are ordered in the desired order of play, and can be played by pressing the button Play Collection.  Once playing, it is possible to pause the song (by pressing stop), play the next song(by pressing Play Next), or play the previous song (by pressing Play Last).  In order to stop playing the song, press the Play Collection again.

The song order can be alphabetized or randomized.  It can also be generated according to each files Degree Of Membership and a random amount.  The amount of randomness vs. DOM is set by the edit box [Random Degree].  At 1.0, it is completely random, and at 0.0 it is completely based on the Degree Of Membership.

Make A Collection by opening a new collection and then going to add file (Upper left button).  From there you can add .mid files to the list.  Comments that you write will be saved to the individual .COL file, not to the midi file itself.  Try adding all of the songs located in the music directory.  Remember to save it.

The next song in the colection starts when the last one has finished.  Thus, if you wish to advance the songs in a collection with the play panel, select the To Go To point on the Play Panel to be the End.  Then, everytime you press the Goto button, the song will goto its end, and the next song in the collection will begin playing.

Please Remember: A Collection Depends on Paths (ie. C:\music\midis\fda.mid ).  If you move the file, the collection wont find it.


The Views

There are three different views for a file: Graph, Staff, and EventList.  The first two have a lot in common.  For both of them, the x and y axes are in 0.1 mm units, and the notes begin at their exact time on the x-axis.


The Graph

The Graphical view is a plot of Pitch vs. Time.  Time is fairly continuous, measured in ticks, but midi Pitch is not: there are 128 possible pitches, and many of them are not utilizeable.  A pitch of 60 is equal to Middle C.

•	The Axes can be shown or hidden.

•	The window can be split with the Splitters (look on the scroll bar).

•	The Gridlines can be shown or hidden.  The lines occur every beat. (one resolutions worth of ticks (eg. 480)).

•	The whole view can be Scaled.

•	The colors of the different channels can be changed.

•	Notes can be selected from different channels.


The Axes

The X-Axis (the one on the bottom, kiddies) is time.  You must specify how many Millimeters you would like to be taken by each beat.  If the tempo=120, You will be specifying how many MMs you would like for each second of music.

The Y-Axis is specified in MMs per pitch class.  In this case the pitch class is one half-step on the chromatic scale.

PS: Some monitors will not display in 0.1MM units.  If this is the case, the monitor will probably default to units which represent 1/200 of an inch, which is fairly close.  Note that if this happens, and you print to a printer that Does support 0.1MM units, the printing which occurs will not be exactly WYSIWYG.  It will print out slightly smaller than it appears on the screen.  In Print preview mode, try zooming in to the middle zoom setting.  When the size of the piece of paper on the screen is equal to the actual size of a piece of paper, well, thats what you will get.


The Display

Select the channels to show, and the colors to display them in.

Also select which Tracks are active.  Active Tracks are the only ones affected by operations like cut and paste.

Also decide how may tracks you want open.  Be careful; if you select less than you want, they go away.  poof.  But at least you dont have to save them that way.


Note Selection

To select a note in either the graph or the staff mode, click on it with the left button.  When you select one thing, the last thing you selected is unselected.  To add the current selection to the old selection, click on the note while holding down the shift key.

If you wish to select the notes from one time to another, Select a time (by dragging the right mouse button left to right) and the notes will be selected.  If you want to perform an action on those notes but not the time you have just selected, select a negative quantity of time.  This will deactivate temporal selection.  In othe words, dragging the right mouse button to the left will unselect the time but leave the notes selected.

Note Menu

The Note Menu gives you three options.

•	See/Change the parameters of the note.

•	Delete the note.

•	Activate/Deactivate the Track of that note.  Only active Tracks will be Cut/Copied/Pasted, etc.  Also left mouse drags play only the active Tracks.


Stretching and Shrinking

To stretch or shrink something, you must select a time.  This time will be expanded or contracted, and all of the notes within its space will be affected.  After you have done this, select the amount that you would like to stretch or shrink the file.  This is a floating point number.  Multiplying the selection by 2.0 would stretch the file, by 0.5 would shrink the file, and by 1.0 would do nothing to the source.

This operation modifies the time on all selected channels.

•	Stretch Factor indicates the amount of stretching/shrinking which occurs.

•	Alter Notes indicates that the Note-on times are spread out or condensed.

•	Alter Durations indicates that the Note-durations are lengthened/shortened.


Quantizing and Randomizing

After you have selected a region, you can quantize or randomize it.  All notes within the selected temporal range will undergo this process.

•	Quantize to nearest tick indicates the amount of quantization, in ticks.  This number has a max. of the resolution of the file (probably 120 or 480).  See the file resolution in the Sync Settings dialog box.

•	Quantization Strength refers to the percentage of quantization which occurs.  Setting this to a number less than 100 will allow a tightening-up of the selected region, without making the notes completely quantized.

•	Random Quanta means that the Quantize to nearest tick will change variably.  This will randomize the notes.

•	Random Quantization Strength means that the Quantization strength will vary from note to note.

•	Quantize Onsets means that the note-on times will be quantized.

•	Quantize durations means that the note-durations will be quantized.


The Staff

This is sort of a unique staff view.  First of all, the onset of the notes is determined by time.  This is real-time kerning.  If the notes are jumbled together, you need to spread them out by adjusting (increasing) the x axis.

•	Its maximum resolution is 1/32 notes.

•	Adjustable Key Signature.

•	Editable noteheads.

If you want to change the duration of a note, remember to press the control key before selecting the note with the right button.  Let go to see the pitdh of the note drawn.


The Cleff

You have a choice of two cleffs: Treble or Bass.  The latter is better for songs that have a lower average pitch range.


The Tempo

The Tempo is two numbers, NotetypesPerMeasure and Notetypes, which affect only the way the note information is displayed.  If you want to change the Sync tempo, do that on the Playpanel.

1.	Notetypes Per Measure:  If this is equal to 4, 4 Notetypes will be displayed per measure.

2.	Notetype:  If the note type is equal to 8,  and NPM=4,  (4 x 1/8 Notes) would be displayed per measure.


The Key

Choose the key of a piece in the Staff Properties dialog.

If you change to a key-signature that contains flats, you may wish to select the menu option Sharp/Flat mode, which will display the notes not contained within the scale of the key signature as either sharps or flats.  I realize that this is a little unorthodox, but I decided that I did not want to deal with the ambiguity of having a note(61) potentailly displayed as either C# or Db.  Sorry.


The List

See and change things in a list-like way.  These affects need to be entered with a RETURN character, and their effects will be immediately visable on another view (the graphview).  It is good for finding out if there are any non-note events, which would not show up on the other views.


Appendix A: Commands

Here are most of the commands.

Keyboard Commands

Song Commands
ALT + Space Bar	Start/Pause play.
ALT + ENTER	Solve the Song.
ALT + R	Record.
ALT + S	Make the current selection the Songs play range.
ALT + P	Opens the Play Panel.  Alt+F4 to close it.
End	Goes to the end of a song.
Home	Goes to the start of a song.
Note Commands
Enter	Enters changed data.
Control	Change Duration of note, in combination with right-button mouse drag.
Shift	Enables selection of multiple notes.
CRTL + C,  CRTL + INS	Copy selected notes/time.
CRTL + X, SHIFT + DEL	Cut selected notes/time.
CRTL + V, SHIFT + INS	Paste selected notes/time, on the next left-button mouse click.
CRTL + Z, ALT + BACKSPACE	Undo the last operation.
Delete	Deletes the selected note.
Arbor Commands
Arrow Keys	Navigate in the tree.
Home	Go to the Root node.
Enter	Makes the Active node the start of the drawing tree.
Mouse Commands

	On a Note	Off any Notes
Left Button Click	Selects + Plays the note.  SHIFT allows selection of multiple notes.
Left Button Dbl Click	Opens the notes parameters.
Left Button Drag	Moves note pitch.	Plays notes in the drag range.
Right Button Click
Right Button Dbl Click		Inserts a note.
Right Button Drag	Moves Onset of a note.  If the control key is pressed, this sets the new duration.	Selects Time and contained notes.  If SHIFT is depressed, the start and end times of the selection become those of the Song.


File Print command
Print command (File menu)

Use this command to print a document.   This command presents a Print dialog box, where you may specify the range of pages to be printed, the number of copies, the destination printer, and other printer setup options.

Shortcuts

Toolbar:

Keys:	CTRL+P


Print dialog box

The following options allow you to specify how the document should be printed:

Printer

This is the active printer and printer connection.  Choose the Setup option to change the printer and printer connection.

Setup

Displays a Print Setup dialog box, so  you can select a printer and printer connection.

Print Range

Specify the pages you want to print:

All	Prints the entire document.
Selection	Prints the currently selected text.
Pages	Prints the range of pages you specify in the From and To boxes.
Copies

Specify the number of copies you want to print for the above page range.

Collate Copies

Prints copies in page number order, instead of separated multiple copies of each page.

Print Quality

Select the quality of the printing.  Generally, lower quality printing takes less time to produce.


Print Progress Dialog

The Printing dialog box is shown during the time that <<YourApp>> is sending output to the printer.  The page number indicates the progress of the printing.

To abort printing, choose Cancel.


File Print Preview command
Print Preview command (File menu)

Use this command to display the active document as it would appear when printed.  When you choose this command, the main window will be replaced with a print preview window in which one or two pages will be displayed in their printed format.  The print preview toolbar offers you options to view either one or two pages at a time; move back and forth through the document; zoom in and out of pages; and initiate a print job.


Print Preview toolbar

The print preview toolbar offers you the following options:

Print

Bring up the print dialog box, to start a print job.

Next Page

Preview the next printed page.

Prev Page

Preview the previous printed page.

One Page / Two Page

Preview one or two printed pages at a time.

Zoom In

Take a closer look at the printed page.

Zoom Out

Take a larger look at the printed page.

Close

Return from print preview to the editing window.


File Print Setup command
Print Setup command (File menu)

Use this command to select a printer and a printer connection.  This command presents a Print Setup dialog box, where you specify the printer and its connection.


Print Setup dialog box

The following options allow you to select the destination printer and its connection.

Printer

Select the printer you want to use.  Choose the Default Printer; or choose the Specific Printer option and select one of the current installed printers shown in the box.  You install printers and configure ports using the Windows Control Panel.

Orientation

Choose Portrait or Landscape.

Paper Size

Select the size of paper that the document is to be printed on.

Paper Source

Some printers offer multiple trays for different paper sources.  Specify the tray here.

Options

Displays a dialog box where you can make additional choices about printing, specific to the type of printer you have selected.

Network...

Choose this button to connect to a network location, assigning it a new drive letter.


File Page Setup Command
Page Setup command (File menu)

<< Write application-specific help here. >>